<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>Extending and Embedding the Python Interpreter &mdash; Python v2.6.2 documentation</title>
    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../',
        VERSION:     '2.6.2',
        COLLAPSE_MODINDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <link rel="search" type="application/opensearchdescription+xml"
          title="Search within Python v2.6.2 documentation"
          href="../_static/opensearch.xml"/>
    <link rel="author" title="About these documents" href="../about.html" />
    <link rel="copyright" title="Copyright" href="../copyright.html" />
    <link rel="top" title="Python v2.6.2 documentation" href="../index.html" />
    <link rel="next" title="1. Extending Python with C or C++" href="extending.html" />
    <link rel="prev" title="41. Undocumented Modules" href="../library/undoc.html" />
    <link rel="shortcut icon" type="image/png" href="../_static/py.png" />
 

  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="../modindex.html" title="Global Module Index"
             accesskey="M">modules</a> |</li>
        <li class="right" >
          <a href="extending.html" title="1. Extending Python with C or C++"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="../library/undoc.html" title="41. Undocumented Modules"
             accesskey="P">previous</a> |</li>
        <li><img src="../_static/py.png" alt=""
                 style="vertical-align: middle; margin-top: -1px"/></li>
        <li><a href="../index.html">Python v2.6.2 documentation</a> &raquo;</li>
 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="extending-and-embedding-the-python-interpreter">
<span id="extending-index"></span><h1>Extending and Embedding the Python Interpreter<a class="headerlink" href="#extending-and-embedding-the-python-interpreter" title="Permalink to this headline">¶</a></h1>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">Release:</th><td class="field-body">2.6</td>
</tr>
<tr class="field"><th class="field-name">Date:</th><td class="field-body">April 15, 2009</td>
</tr>
</tbody>
</table>
<p>This document describes how to write modules in C or C++ to extend the Python
interpreter with new modules.  Those modules can define new functions but also
new object types and their methods.  The document also describes how to embed
the Python interpreter in another application, for use as an extension language.
Finally, it shows how to compile and link extension modules so that they can be
loaded dynamically (at run time) into the interpreter, if the underlying
operating system supports this feature.</p>
<p>This document assumes basic knowledge about Python.  For an informal
introduction to the language, see <a class="reference external" href="../tutorial/index.html#tutorial-index"><em>The Python Tutorial</em></a>.  <a class="reference external" href="../reference/index.html#reference-index"><em>The Python Language Reference</em></a>
gives a more formal definition of the language.  <a class="reference external" href="../library/index.html#library-index"><em>The Python Standard Library</em></a> documents
the existing object types, functions and modules (both built-in and written in
Python) that give the language its wide application range.</p>
<p>For a detailed description of the whole Python/C API, see the separate
<a class="reference external" href="../c-api/index.html#c-api-index"><em>Python/C API Reference Manual</em></a>.</p>
<ul>
<li class="toctree-l1"><a class="reference external" href="extending.html">1. Extending Python with C or C++</a><ul>
<li class="toctree-l2"><a class="reference external" href="extending.html#a-simple-example">1.1. A Simple Example</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#intermezzo-errors-and-exceptions">1.2. Intermezzo: Errors and Exceptions</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#back-to-the-example">1.3. Back to the Example</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#the-module-s-method-table-and-initialization-function">1.4. The Module&#8217;s Method Table and Initialization Function</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#compilation-and-linkage">1.5. Compilation and Linkage</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#calling-python-functions-from-c">1.6. Calling Python Functions from C</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#extracting-parameters-in-extension-functions">1.7. Extracting Parameters in Extension Functions</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#keyword-parameters-for-extension-functions">1.8. Keyword Parameters for Extension Functions</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#building-arbitrary-values">1.9. Building Arbitrary Values</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#reference-counts">1.10. Reference Counts</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#writing-extensions-in-c">1.11. Writing Extensions in C++</a></li>
<li class="toctree-l2"><a class="reference external" href="extending.html#providing-a-c-api-for-an-extension-module">1.12. Providing a C API for an Extension Module</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="newtypes.html">2. Defining New Types</a><ul>
<li class="toctree-l2"><a class="reference external" href="newtypes.html#the-basics">2.1. The Basics</a></li>
<li class="toctree-l2"><a class="reference external" href="newtypes.html#type-methods">2.2. Type Methods</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="building.html">3. Building C and C++ Extensions with distutils</a><ul>
<li class="toctree-l2"><a class="reference external" href="building.html#distributing-your-extension-modules">3.1. Distributing your extension modules</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="windows.html">4. Building C and C++ Extensions on Windows</a><ul>
<li class="toctree-l2"><a class="reference external" href="windows.html#a-cookbook-approach">4.1. A Cookbook Approach</a></li>
<li class="toctree-l2"><a class="reference external" href="windows.html#differences-between-unix-and-windows">4.2. Differences Between Unix and Windows</a></li>
<li class="toctree-l2"><a class="reference external" href="windows.html#using-dlls-in-practice">4.3. Using DLLs in Practice</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="embedding.html">5. Embedding Python in Another Application</a><ul>
<li class="toctree-l2"><a class="reference external" href="embedding.html#very-high-level-embedding">5.1. Very High Level Embedding</a></li>
<li class="toctree-l2"><a class="reference external" href="embedding.html#beyond-very-high-level-embedding-an-overview">5.2. Beyond Very High Level Embedding: An overview</a></li>
<li class="toctree-l2"><a class="reference external" href="embedding.html#pure-embedding">5.3. Pure Embedding</a></li>
<li class="toctree-l2"><a class="reference external" href="embedding.html#extending-embedded-python">5.4. Extending Embedded Python</a></li>
<li class="toctree-l2"><a class="reference external" href="embedding.html#embedding-python-in-c">5.5. Embedding Python in C++</a></li>
<li class="toctree-l2"><a class="reference external" href="embedding.html#linking-requirements">5.6. Linking Requirements</a></li>
</ul>
</li>
</ul>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <h4>Previous topic</h4>
            <p class="topless"><a href="../library/undoc.html"
                                  title="previous chapter">41. Undocumented Modules</a></p>
            <h4>Next topic</h4>
            <p class="topless"><a href="extending.html"
                                  title="next chapter">1. Extending Python with C or C++</a></p>
            <h3>This Page</h3>
            <ul class="this-page-menu">
              <li><a href="../_sources/extending/index.txt"
                     rel="nofollow">Show Source</a></li>
            </ul>
          <div id="searchbox" style="display: none">
            <h3>Quick search</h3>
              <form class="search" action="../search.html" method="get">
                <input type="text" name="q" size="18" />
                <input type="submit" value="Go" />
                <input type="hidden" name="check_keywords" value="yes" />
                <input type="hidden" name="area" value="default" />
              </form>
              <p class="searchtip" style="font-size: 90%">
              Enter search terms or a module, class or function name.
              </p>
          </div>
          <script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="../modindex.html" title="Global Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="extending.html" title="1. Extending Python with C or C++"
             >next</a> |</li>
        <li class="right" >
          <a href="../library/undoc.html" title="41. Undocumented Modules"
             >previous</a> |</li>
        <li><img src="../_static/py.png" alt=""
                 style="vertical-align: middle; margin-top: -1px"/></li>
        <li><a href="../index.html">Python v2.6.2 documentation</a> &raquo;</li>
 
      </ul>
    </div>
    <div class="footer">
      &copy; <a href="../copyright.html">Copyright</a> 1990-2009, Python Software Foundation.
      Last updated on Apr 15, 2009.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
    </div>
  </body>
</html>